printing: Don't hang in gtk_enumerate_printers()
authorMarek Kasik <mkasik@redhat.com>
Wed, 26 Mar 2014 11:29:46 +0000 (12:29 +0100)
committerMarek Kasik <mkasik@redhat.com>
Thu, 23 Mar 2017 12:19:13 +0000 (13:19 +0100)
Stop enumerating printers when all backends were removed.

https://bugzilla.gnome.org/show_bug.cgi?id=686838

gtk/gtkprinter.c

index c34eafb136f5e372c4fa939264aca94be8307deb..5e145ddd69a5cbcf7773432b8991dbb295da1b25 100644 (file)
@@ -1146,7 +1146,7 @@ backend_status_changed (GObject    *object,
     list_done_cb (backend, printer_list);  
 }
 
-static void
+static gboolean
 list_printers_remove_backend (PrinterList     *printer_list,
                               GtkPrintBackend *backend)
 {
@@ -1155,7 +1155,12 @@ list_printers_remove_backend (PrinterList     *printer_list,
   g_object_unref (backend);
 
   if (printer_list->backends == NULL)
-    free_printer_list (printer_list);
+    {
+      free_printer_list (printer_list);
+      return TRUE;
+    }
+
+  return FALSE;
 }
 
 static void
@@ -1193,7 +1198,10 @@ list_printers_init (PrinterList     *printer_list,
   
   if (status == GTK_PRINT_BACKEND_STATUS_UNAVAILABLE || 
       gtk_print_backend_printer_list_is_done (backend))
-    list_printers_remove_backend(printer_list, backend);
+    {
+      if (list_printers_remove_backend (printer_list, backend))
+        return TRUE;
+    }
   else
     {
       g_signal_connect (backend, "printer-added",